iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0
Modern Web

想轉職的鯊魚從零基礎開始學習JavaScript系列 第 19

想轉職的鯊魚從零基礎開始學習JavaScript Day-19 Fundamental Objects(二)-Function Objects (函式物件)

  • 分享至 

  • xImage
  •  

前言

函式是JavaScript的最重要的一部份,所有的運作都是靠函式一個一個連接起來,就像是精密儀器的小小螺絲,微小但是很重要,跟鯊魚一起來看看Function函式吧!

概述

先前有簡略的帶過一次,函式的本質是當函式被呼叫的時候,會將內部Statements依序執行。

Function constructor(物件建構式)

在Global Object中有一個"Function" property,這個就是函式的原型建構式,創立一個新函式的時候都會繼承這個constructor(建構式),而正因為有constructor(建構式),創立新物件的也可以透過new去執行。

let shark = new Function();
shark
// ƒ anonymous(
// ) {
// 
// }
// 回傳一個沒有內容的anonymous(匿名)函式

納入parameters參數跟運作的內容會變這樣

let shark = new Function( 參數a , 參數b , 運作的內容(Statements);

但是鯊魚不建議用上面的方法建構一個新的函式,那會看起來很亂,
通常鯊魚都是下面的方式來建立一個函式

  1. 宣告這是一個函式
  2. 給予這個函式一個名稱
  3. 納入運作時需要的參數
  4. 製作運作內容(Statements)
  5. 如果需要輸出結果就用return將結果輸出

函式製成

2022/10/24補充

這種函式的製成被稱作 Function declarations(函式宣告)

還有另一個跟這個很像的 function expressions(函式表達式)

函式表達式

Properties of the Function Constructor

  • Function.length
    值為1,實際用途目前鯊魚無法理解。
  • Function.prototype
    後續會說到的物件Function.prototype的初始對象,
    其內容為:
    [[Writable]]: false,
    [[Enumerable]]: false,
    [[Configurable]]: false

Properties of the Function Prototype Object

  • Function.prototype.apply ( thisArg, argArray )
    Function.prototype表示函式名稱
    thisArg表示呼叫函式內的this的對象,如果沒有可隨意填入一個任意的值,通常會填入null。
    argArray表示參數的陣列。
    當函式內有this,卻沒有相對應的參數時的一種執行函式的方式
  • Function.prototype.bind ( thisArg, ...args )
    ...args表示多個參數。
    跟上面不一樣的是apply是呼叫函式,bind是創建一個新函式。
    使用這個方法創建的新函式是沒有原型對象的,所以不能使用函式原型的屬性。
  • Function.prototype.call ( thisArg, ...args )
    跟上面apply類似但是使用參數的形式不一樣。
    apply的參數是一組陣列call則是直接接在thisArg後面,一個一個往後排
  • Function.prototype.constructor
    函式的原型結構
  • Function.prototype.toString ( )
    將函式的源碼(code)轉換成字串,
  • Function.prototype [ @@hasInstance ] ( V )
    A method that determines if a constructor object recognizes an object as one of the constructor's instances.
    一種確定構造函數對像是否將對象識別為構造函數實例之一的方法。
    目前鯊魚看不懂MDN也沒有相關的說明,等鯊魚有找到再向各位介紹

Function Instances(MDN提到的Function的Properties)

  • length
    回傳一個function的要調用的參數數量
function sharkPlus ( a , b ) {
  return a + b
}
sharkPlus.length
// 2
// 因為有兩個參數所以回傳2
  • name
    用字串回傳一個function的名稱
sharkPlus.name
// 'sharkPlus'
  • prototype
    回傳這個函式的全貌,除了繼承的函式建構式之外,也包含函式屬於自己的其他樣貌
    函式全貌

結語

跟鯊魚看完這些,有沒有覺得"就這樣?",感覺還少說了甚麼東西,但是函式很多都是他的延伸概念,以及Statements編撰。
以基礎來說真的不多,但是他的延伸出來的花樣很多。
後面再為各位一一說明吧。

鯊語錄

參考資料

bind, call, apply 的差異
EMCA262
MDN-Function


上一篇
想轉職的鯊魚從零基礎開始學習JavaScript Day-18 Fundamental Objects(一)-Object Objects (名為物件的物件)
下一篇
想轉職的鯊魚從零基礎開始學習JavaScript Day-20 Indexed Collections-Array Objects(陣列)
系列文
想轉職的鯊魚從零基礎開始學習JavaScript31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言